package edu.unmsm.ocaa.sisocaa.negocio.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;

import edu.unmsm.ocaa.sisocaa.integracion.dao.Rep1DAO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.PregFichaDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.PregFichaconRespDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.Rep1DTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.Rep1_2DTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.RespuestaconOpcDTO;
import edu.unmsm.ocaa.sisocaa.negocio.service.PregFichaService;
import edu.unmsm.ocaa.sisocaa.negocio.service.Rep1Service;
import edu.unmsm.ocaa.sisocaa.negocio.service.RespuestaService;

@Service
public class Rep1ServiceImpl implements Rep1Service{

	@Resource
	Rep1DAO rep1dao;
	@Resource
	PregFichaService pregserv;
	@Resource
	RespuestaService respserv;
	@Override
	public List<Rep1DTO> listarRep1(Integer idFicha) throws DataAccessException {
		// TODO Auto-generated method stub
		List<Rep1DTO> listusus=rep1dao.selectRep1(idFicha);
		llenarPreguntasconRespuestas(idFicha, listusus);
		return listusus;
	}

	private void llenarPreguntasconRespuestas(Integer idFicha,
			List<Rep1DTO> listusus) {
		List<PregFichaDTO> listpreg=pregserv.listarPregxFicha(idFicha);
		obtenerUsusyRptas(idFicha, listusus, listpreg);
	}

	private void obtenerUsusyRptas(Integer idFicha, List<Rep1DTO> listusus,
			List<PregFichaDTO> listpreg) {
		for (int i = 0; i < listusus.size(); i++) {
			List<PregFichaconRespDTO> listpregconresp=new ArrayList<PregFichaconRespDTO>();
			Rep1DTO usu=listusus.get(i);
			for (int j = 0; j < listpreg.size(); j++) {
				PregFichaDTO preg=listpreg.get(j);
				PregFichaconRespDTO pregconresp=new PregFichaconRespDTO();
				pregconresp.setDsc_pregficha(preg.getDsc_pregficha());
				pregconresp.setId_ficha(preg.getId_ficha());
				pregconresp.setId_pregficha(preg.getId_pregficha());
				pregconresp.setListresp(respserv.listarRespxPregconOpc(idFicha, preg.getId_pregficha(), usu.getUsuid()));
				listpregconresp.add(pregconresp);
			}
			listusus.get(i).setListpregs(listpregconresp);
		}
	}

	@Override
	public List<Rep1DTO> listarRep1xDep(Integer idFicha, Integer idDep)
			throws DataAccessException {
		// TODO Auto-generated method stub
		List<Rep1DTO> listusus=rep1dao.selectRep1xDep(idFicha, idDep);
		llenarPreguntasconRespuestas(idFicha, listusus);
		return listusus;
	}

	@Override
	public List<Rep1_2DTO> listarRep12xDep(Integer idFicha, Integer idDep)
			throws DataAccessException {
		// TODO Auto-generated method stub
		List<PregFichaDTO> listpreg=pregserv.listarPregxFicha(idFicha);
		List<Rep1DTO> listusus=rep1dao.selectRep1xDep(idFicha, idDep);
		return llenarPreguntasconRespuestas1_2(idFicha, listpreg, listusus);
	}
	private List<Rep1_2DTO> llenarPreguntasconRespuestas1_2(Integer idFicha,
			List<PregFichaDTO> listpreg,List<Rep1DTO> listusus) {
		List<Rep1_2DTO> rep1_2=new ArrayList<Rep1_2DTO>();
		obtenerUsusyRptas(idFicha, listusus, listpreg);
		for (int i = 0; i < listpreg.size(); i++) {
			Rep1_2DTO rep=new Rep1_2DTO();
			rep.setDsc_pregficha(listpreg.get(i).getDsc_pregficha());
			rep.setId_ficha(listpreg.get(i).getId_ficha());
			rep.setId_pregficha(listpreg.get(i).getId_pregficha());
			rep.setId_tiporesp(listpreg.get(i).getId_tiporesp());
			List<Rep1DTO> listresp=new ArrayList<Rep1DTO>();
			for (int j = 0; j < listusus.size(); j++) {
				Rep1DTO rep1=new Rep1DTO();
				rep1.setApemat(listusus.get(j).getApemat());
				rep1.setApepat(listusus.get(j).getApepat());
				rep1.setDescrip_dep(listusus.get(j).getDescrip_dep());
				rep1.setNom(listusus.get(j).getNom());
				rep1.setUsuid(listusus.get(j).getUsuid());
				List<RespuestaconOpcDTO> listrespopc=new ArrayList<RespuestaconOpcDTO>();
				for (int k = 0; k < listusus.get(j).getListpregs().size(); k++) {
					PregFichaconRespDTO pfcr=listusus.get(j).getListpregs().get(k);
					if (rep.getId_pregficha()==pfcr.getId_pregficha()) {
						listrespopc=pfcr.getListresp();
						k=listusus.get(j).getListpregs().size();
					}
					rep1.setListresp(listrespopc);
				}
				listresp.add(rep1);
			}
			rep.setListUsuResp(listresp);
			rep1_2.add(rep);
		}
		return rep1_2;
	}
}
